﻿// --------------------------------------------------------------------------------------------------------------------
// <copyright file="IDelegatable.cs" company="JDML Consulting Ltd.">
//   Copyright 2011 Photon Project - http://photon.codeplex.com
// </copyright>
// <summary>
//   Defines the IDelegatable type.
// </summary>
// --------------------------------------------------------------------------------------------------------------------

namespace Photon
{
    public interface IDelegatable
    {
        void InvokeAction();
        void InvokeAction<TArg1>(TArg1 arg1);
        void InvokeAction<TArg1, TArg2>(TArg1 arg1, TArg2 arg2);
        void InvokeAction<TArg1, TArg2, TArg3>(TArg1 arg1, TArg2 arg2, TArg3 arg3);
        void InvokeAction<TArg1, TArg2, TArg3, TArg4>(TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4);
        TReturn InvokeFunc<TReturn>();
        TReturn InvokeFunc<TArg1, TReturn>(TArg1 arg1);
        TReturn InvokeFunc<TArg1, TArg2, TReturn>(TArg1 arg1, TArg2 arg2);
        TReturn InvokeFunc<TArg1, TArg2, TArg3, TReturn>(TArg1 arg1, TArg2 arg2, TArg3 arg3);
        TReturn InvokeFunc<TArg1, TArg2, TArg3, TArg4, TReturn>(TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4);
    }
}
